// 自定义错误
// 当错误发生的时候，我们捕获到发生的错误，然后抛出自定义的错误
const { formatResponse } = require("./tool")

/**
 * 业务错误处理基类，继承error
 */
class ServiceError extends Error {

    /**
     * 
     * @param {*} message 错误消息
     * @param {*} code 错误消息码
     */
    constructor(message, code) {
        super(message) // 消息扔给Error
        this.code = code
    }

    // 
    toResponseJSONError() {
        return formatResponse(this.code, this.message, null)
    }
}

// 文件上传错误
exports.UploadError = class extends ServiceError {
    constructor(message) {
        super(message, 413) // 传给父类ServiceError
    }
}

// 禁止访问错误
exports.ForbiddenError = class extends ServiceError {
    constructor(message) {
        super(message, 401) // 传给父类ServiceError
    }
}

// 验证错误
exports.ValidationError = class extends ServiceError {

    constructor(message) {
        super(message, 413) // 传给父类ServiceError
    }
}

// 无资源错误
exports.NotFoundError = class extends ServiceError {
    constructor() {
        super("not found", 404) // 传给父类ServiceError
    }
}

// 未知错误
exports.UnknownError = class extends ServiceError {
    constructor() {
        super("server internal error", 500) // 传给父类ServiceError
    }
}

module.exports.ServiceError = ServiceError